Дата выхода:
Версия 2.0 - 18.11.2021
Версия 1.0 - 12.11.2021
Описание плагина:
Плагин позволяет включать или выключать все плагины.
Нюансы:
0. Плагин не выключает себя.
1. Для того, что бы игра корректно считала факт выключения / включения плагинов, ее нужно перезапустить; в плагине есть возможность автоперезапуска.
2. Происходит работа с файловой системой, а именно - перезаписывается файл plugins.js (и только он!).
3. В версии 2.0, при отключенном автоперезапуске игры и ручном включении / выключении нескольких плагинов подряд - должна быть пауза минимум в 15 кадров!
Использование плагина(одинаково и для MV , и для MZ):
Параметры плагина
В параметрах можно указать: перезапускать ли игру автоматически после вкл./выкл. плагинов, или нет.
Команды (в эвенте, в команде "Скрипт"):
DKR.PluginsWorker.disableAllPlugins() - выключить все плагины (кроме себя);
DKR.PluginsWorker.enableAllPlugins() - включает все плагины;
DKR.PluginsWorker.disableConcretePlugin(pluginName ) - выключает плагин с заданным именем; DKR.PluginsWorker.enableConcretePlugin(pluginName) - включает плагин с заданным именем;
где pluginName - имя плагина в одинарных или двойных кавычках (например, 'YEP_SkillCore');
DKR.PluginsWorker.isGameReloadAfterPluginsModify(t rue / false) - включает / выключает перезапуск игры после вкл./выкл. плагинов, если в параметре было указано иное. true - перезапускать, false - не перезапускать.
DKR.PluginsWorker.forceReloadGame() - форсированный перезапуск игры.
Код:
СпойлерКод плагина, версия 2.0:
Код:
/*:
*-----------------------------------------------------------------------------
* DKR PluginsWorker
*-----------------------------------------------------------------------------
* For: RPGMAKER MV, MZ
* DKR_PluginsWorker.js
*-----------------------------------------------------------------------------
* 18.11.2021 - Версия 2.0.0
*-----------------------------------------------------------------------------
* Поставляется AS-IS.
* Вся ответственность при использовании - на Пользователе!
*-----------------------------------------------------------------------------
*-----------------------------------------------------------------------------
* @author DarchanKaen
* @target MV, MZ
* @plugindesc (v.2.0.0) Плагин позволяет принудительно включать/выключать плагины(кроме себя).
* @help
* DKR PluginsWorker 2.0
* ----------------------------------------------------------------------------
* ----Общая информация:
*
* Плагин позволяет включать или выключать все плагины.
* Обратите внимание - для вступления изменений в силу игра должна быть перезапущена!
* По-умолчанию плагин перезапускате игру после вкл./выкл. плагинов, но это можно отключить
* в параметрах плагина. Себя плагин не выключает.
*
* ----Использование:
*
* ---Параметры плагина
* В параметрах можно указать: перезапускать ли игру автоматически после вкл./выкл. плагинов, или нет.
*
* ---Команды (для раздела "Скрипт"):
* --Управляющие команды:
*
* DKR.PluginsWorker.disableAllPlugins() - выключить все плагины (кроме себя);
* DKR.PluginsWorker.enableAllPlugins() - включает все плагины;
* DKR.PluginsWorker.disableConcretePlugin(pluginName) - выключает плагин с заданным именем;
* DKR.PluginsWorker.enableConcretePlugin(pluginName) - включает плагин с заданным именем;
* где pluginName - имя плагина в одинарных или двойных кавычках (например, 'YEP_SkillCore');
* ! Между командами вкл./выкл. конкретных плагинов нужна пауза в 15 кадров минимум !
* DKR.PluginsWorker.isGameReloadAfterPluginsModify(true / false) - включает / выключает перезапуск
* игры после вкл./выкл. плагинов, если в параметре было указано иное.
* true - перезапускать, false - не перезапускать.
* DKR.PluginsWorker.forceReloadGame() - форсированный перезапуск игры.
*
* ----------------------------------------------------------------------------
* @param reloadGameAfterModify
* @type boolean
* @desc Перезапускать ли игру после вкл./выкл. плагинов?
* @default true
*/
var Imported = Imported || {};
Imported.DKR_PluginsWorker = true;
var DKR = DKR || {};
DKR.PluginsWorker = DKR.PluginsWorker || {};
DKR.PluginsWorker.version = 2.0;
DKR.PluginsWorker.parameters = PluginManager.parameters('DKR_PluginsWorker_2');
( () => {
//----DATA
let doGameReloadAfterModifyPlugins = eval( String( DKR.PluginsWorker.parameters['reloadGameAfterModify'] ) );
let concretePluginToDisable = '';
let concretePluginToEnable = '';
let pluginsToDisableExceptList = [];
let pluginsToEnableExceptList = [];
const pluginSelfName = 'DKR_PluginsWorker';
const pluginsFilePath = 'js/plugins.js';
const fileSystem = require('fs');
//----LOGIC
const openPluginsFile = (callbackTask) =>{
try{
let xhr = new XMLHttpRequest();
let pluginsFileData = -1;
xhr.open('GET', pluginsFilePath);
xhr.overrideMimeType('application/json');
xhr.onload = function() {
if (xhr.status < 400) {
pluginsFileData = xhr.responseText;
callbackTask( pluginsFileData );
return pluginsFileData;
}
}
xhr.send();
}catch(error){
console.log(`DKR.PluginsWorker_try_OPEN: unknown error on file ${url} opening!!!`);
console.log(error);
return false;
}
}
const offAllPlugins = () => {
const pluginsFileData = openPluginsFile(disablePluginsData);
}
const onAllPlugins = () => {
const pluginsFileData = openPluginsFile(enablePluginsData);
}
const disablePluginsData = (pluginsFileData) => {
let pluginsDataParsedList = pluginsFileData.split('}},');
let crackedPluginsData = [];
for(let n = 0; n < pluginsDataParsedList.length; n++){
if( true === pluginsDataParsedList[n].includes(pluginSelfName) ){
//-THIS PLUGIN
crackedPluginsData[n] = pluginsDataParsedList[n];
}else{
//-NOT-THIS PLUGIN
//--2.0
if('' === concretePluginToDisable){
crackedPluginsData[n] = pluginsDataParsedList[n].replace('"status":true', '"status":false');
}else{
if( true === pluginsDataParsedList[n].includes(concretePluginToDisable) ){
crackedPluginsData[n] = pluginsDataParsedList[n].replace('"status":true', '"status":false');
}else{
crackedPluginsData[n] = pluginsDataParsedList[n];
}
}
}
}
//--2.0
if('' !== concretePluginToDisable){
concretePluginToDisable = '';
}
let unitedPluginsData = crackedPluginsData.join('}},');
try{
console.log('concretePluginToDisable:', concretePluginToDisable);
fileSystem.writeFileSync(pluginsFilePath, unitedPluginsData);
if(true === doGameReloadAfterModifyPlugins){
location.reload();
}
}catch(error){
console.log(`DKR.PluginsWorker_try_OFF: unknown error on file ${url} writing!!!`);
console.log(error);
return false;
}
}
const enablePluginsData = (pluginsFileData) => {
let pluginsDataParsedList = pluginsFileData.split('}},');
let crackedPluginsData = [];
for(let n = 0; n < pluginsDataParsedList.length; n++){
//--2.0
if('' === concretePluginToEnable){
crackedPluginsData[n] = pluginsDataParsedList[n].replace('"status":false', '"status":true');
}else{
if( true === pluginsDataParsedList[n].includes(concretePluginToEnable) ){
crackedPluginsData[n] = pluginsDataParsedList[n].replace('"status":false', '"status":true');
}else{
crackedPluginsData[n] = pluginsDataParsedList[n];
}
}
}
//--2.0
if('' !== concretePluginToEnable){
concretePluginToEnable = '';
}
let unitedPluginsData = crackedPluginsData.join('}},');
try{
fileSystem.writeFileSync(pluginsFilePath, unitedPluginsData);
if(true === doGameReloadAfterModifyPlugins){
location.reload();
}
}catch(error){
console.log(`DKR.PluginsWorker_try_ON: unknown error on file ${url} writing!!!`);
console.log(error);
return false;
}
}
//----COMMANDS
DKR.PluginsWorker.disableAllPlugins = function(){
offAllPlugins();
}
DKR.PluginsWorker.enableAllPlugins = function(){
onAllPlugins();
}
DKR.PluginsWorker.isGameReloadAfterPluginsModify = function(isReload = true){
doGameReloadAfterModifyPlugins = isReload;
}
//--2.0
DKR.PluginsWorker.disableConcretePlugin = function(concretePluginName){
concretePluginToDisable = concretePluginName;
offAllPlugins();
}
DKR.PluginsWorker.enableConcretePlugin = function(concretePluginName){
concretePluginToEnable = concretePluginName;
onAllPlugins();
}
DKR.PluginsWorker.forceReloadGame = function(){
location.reload();
}
})();
СпойлерКод плагина, версия 1.0:
Код:
/*:
*-----------------------------------------------------------------------------
* DKR PluginsWorker
*-----------------------------------------------------------------------------
* For: RPGMAKER MV, MZ
* DKR_PluginsWorker.js
*-----------------------------------------------------------------------------
* 12.11.2021 - Версия 1.0.0
*-----------------------------------------------------------------------------
* Поставляется AS-IS.
* Вся ответственность при использовании - на Пользователе!
*-----------------------------------------------------------------------------
*-----------------------------------------------------------------------------
* @author DarchanKaen
* @target MV, MZ
* @plugindesc (v.1.0.0) Плагин позволяет принудительно включать/выключать плагины(кроме себя).
* @help
* DKR PluginsWorker 1.0
* ----------------------------------------------------------------------------
* ----Общая информация:
*
* Плагин позволяет включать или выключать все плагины.
* Обратите внимание - для вступления изменений в силу игра должна быть перезапущена!
* По-умолчанию плагин перезапускате игру после вкл./выкл. плагинов, но это можно отключить
* в параметрах плагина. Себя плагин не выключает.
*
* ----Использование:
*
* ---Параметры плагина
* В параметрах можно указать: перезапускать ли игру автоматически после вкл./выкл. плагинов, или нет.
*
* ---Команды (для раздела "Скрипт"):
* --Управляющие команды:
*
* DKR.PluginsWorker.disableAllPlugins() - выключает все плагины (кроме себя);
* DKR.PluginsWorker.enableAllPlugins() - включает все плагины;
* DKR.PluginsWorker.isGameReloadAfterPluginsModify(true / false) - включает / выключает перезапуск
* игры после вкл./выкл. плагинов, если в параметре было указано иное.
* true - перезапускать, false - не перезапускать.
*
* ----------------------------------------------------------------------------
* @param reloadGameAfterModify
* @type boolean
* @desc Перезапускать ли игру после вкл./выкл. плагинов?
* @default true
*/
var Imported = Imported || {};
Imported.DKR_PluginsWorker = true;
var DKR = DKR || {};
DKR.PluginsWorker = DKR.PluginsWorker || {};
DKR.PluginsWorker.version = 1.0;
DKR.PluginsWorker.parameters = PluginManager.parameters('DKR_PluginsWorker');
( () => {
//----DATA
let doGameReloadAfterModifyPlugins = eval( String( DKR.PluginsWorker.parameters['reloadGameAfterModify'] ) );
const pluginSelfName = 'DKR_PluginsWorker';
const pluginsFilePath = 'js/plugins.js';
const fileSystem = require('fs');
//----LOGIC
const openPluginsFile = (callbackTask) =>{
try{
let xhr = new XMLHttpRequest();
let pluginsFileData = -1;
xhr.open('GET', pluginsFilePath);
xhr.overrideMimeType('application/json');
xhr.onload = function() {
if (xhr.status < 400) {
pluginsFileData = xhr.responseText;
callbackTask( pluginsFileData );
return pluginsFileData;
}
}
xhr.send();
}catch(error){
console.log(`DKR.PluginsWorker_try_OPEN: unknown error on file ${url} opening!!!`);
console.log(error);
return false;
}
}
const offAllPlugins = () => {
const pluginsFileData = openPluginsFile(disablePluginsData);
}
const onAllPlugins = () => {
const pluginsFileData = openPluginsFile(enablePluginsData);
}
const disablePluginsData = (pluginsFileData) => {
let pluginsDataParsedList = pluginsFileData.split('}},');
let crackedPluginsData = [];
for(let n = 0; n < pluginsDataParsedList.length; n++){
if( true === pluginsDataParsedList[n].includes(pluginSelfName) ){
//-THIS PLUGIN
crackedPluginsData[n] = pluginsDataParsedList[n];
}else{
//-NOT-THIS PLUGIN
crackedPluginsData[n] = pluginsDataParsedList[n].replace('"status":true', '"status":false');
}
}
let unitedPluginsData = crackedPluginsData.join('}},');
try{
fileSystem.writeFileSync(pluginsFilePath, unitedPluginsData);
if(true === doGameReloadAfterModifyPlugins){
location.reload();
}
}catch(error){
console.log(`DKR.PluginsWorker_try_OFF: unknown error on file ${url} writing!!!`);
console.log(error);
return false;
}
}
const enablePluginsData = (pluginsFileData) => {
let pluginsDataParsedList = pluginsFileData.split('}},');
let crackedPluginsData = [];
for(let n = 0; n < pluginsDataParsedList.length; n++){
crackedPluginsData[n] = pluginsDataParsedList[n].replace('"status":false', '"status":true');
}
let unitedPluginsData = crackedPluginsData.join('}},');
try{
fileSystem.writeFileSync(pluginsFilePath, unitedPluginsData);
if(true === doGameReloadAfterModifyPlugins){
location.reload();
}
}catch(error){
console.log(`DKR.PluginsWorker_try_ON: unknown error on file ${url} writing!!!`);
console.log(error);
return false;
}
}
//----COMMANDS
DKR.PluginsWorker.disableAllPlugins = function(){
offAllPlugins();
}
DKR.PluginsWorker.enableAllPlugins = function(){
onAllPlugins();
}
DKR.PluginsWorker.isGameReloadAfterPluginsModify = function(isReload = true){
doGameReloadAfterModifyPlugins = isReload;
}
})();
Условия поставки плагина:
Поставляется AS-IS.
Вся ответственность при использовании - на Пользователе! !
Совместимость:
Плагин не вносит изменений в системы мейкера, а работает с файлом plugins.js.
Если какие-то плагины ему не нравятся - он не конфликтует с ними, а просто отключает. =)
СпойлерЛирическое отступление:
Если будет форумная игра по типу "ярмарка" да еще и на MV / MZ , по мнению Ральфа возможность отключение плагинов может помочь. Ну, посмотрим.
Последний раз редактировалось Darchan Kaen; 18.11.2021 в 00:47.
Причина: Вышла версия плагина 2.0
Вышла версия плагина 2.0.
Добавлены команды скрипта для включения / выключения отдельного плагина (одного за один вызов скрипта), а также команда скрипта для перезапуска игры.
Добавлен код новой версии плагина, ссылки на скачивание и обновлены команды скрипта и "нюансы".
Обратите внимание!
Точное имя нужного плагина смотрите в файле plugins.js, что находится в папке js проекта; имя плагина нужно указывать в одинарных или двойных кавычках.
Если вы отключили автоперезапуск игры после использования данного плагина и включаете / выключаете несколько плагинов подряд, то перед вызовом команды скрипта ставьте паузу минимум в 15 кадров.
Социальные закладки